﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using Sistema_Totem.Clases;
using Sistema_Totem.Logica.Comandos;
using Sistema_Totem.Clases.Fabricas;
using Sistema_Totem.Logica.Fabricas;

namespace Sistema_Totem.Pruebas
{
    [TestFixture]
    public class PruebasLogin
    {
        private bool _bool;
        private bool _boolUsuario;
        private Usuario _usuario;
        private Usuario _usuarioPassword;
        private Comando<int> _comandoInt;
        private Comando<bool> _comandoBool;
        private Comando<bool> _comandoBoolUsuario;
        private Comando<Entidad> _comandoEntidad;

        #region Pruebas FabricaEntidad 

        /// <summary>
        /// Prueba para verificar que la fabrica de entidades retorne la instancia correcta.
        /// </summary>
        
        [Test]
        public void PruebaInstanciaUsuario()
        {
            _usuario = (Usuario)FabricaEntidad.CrearUsuario();
            Assert.IsInstanceOf(typeof(Usuario), _usuario);
        }

        #endregion

        #region Pruebas FabricaComando 

        /// <summary>
        /// Prueba para verificar que la fabrica de comandos retorne la instancia correcta.
        /// </summary>
        
        [Test]
        public void PruebaInstanciaComandoConsultarIdUsuario()
        {
            _comandoInt = FabricaComando.CrearComandoConsultarIdUsuario("nombre", "password");
            Assert.IsInstanceOf(typeof(Comando<int>), _comandoInt);
        }

        #endregion

        #region Prueba Consultar Usuario
        
        [Test]
        public void PruebaConsultarIdUsuario()
        {
            _usuario = (Usuario)FabricaEntidad.CrearUsuario();
            _usuario.Nombre = "juan";
            _usuario.Password = "123juan";
            Comando<int> _comandoInt = FabricaComando.CrearComandoConsultarIdUsuario(_usuario.Nombre, _usuario.Password);
            int _idUsuario = _comandoInt.Ejecutar();
            Assert.AreEqual(_idUsuario,3);
        }

        [Test]
        public void PruebaModificarPassword()
        {
            _comandoBool = FabricaComando.CrearComandoModificarPassword("juan","123456789");
            _bool = _comandoBool.Ejecutar();
            Assert.AreEqual(_bool, true);
           
        }

        [Test]
        public void PruebaRecuperarPassword()
        {
            _comandoEntidad = FabricaComando.CrearComandoRecuperarPassword("juan");
            _usuarioPassword = (Usuario) _comandoEntidad.Ejecutar();
            Assert.IsInstanceOf(typeof(Usuario),_usuarioPassword);
        }

        [Test]
        public void PruebaValidarUsuario()
        {
            _comandoBoolUsuario = FabricaComando.CrearComandoValidarUsuario("juan","123456789");
            _boolUsuario = _comandoBoolUsuario.Ejecutar();
            Assert.AreEqual(_boolUsuario, true);
        }
        #endregion
    }
}